from django.shortcuts import render
from django.http.response import HttpResponse
from django.http.response import JsonResponse
import json
import os

# 定义一个处理 GET 请求的视图函数
def GetPage(request):
    # 定义一个简单的 HTML 字符串作为响应内容
    data = '<h1>request.Get</h1>'
    
    # 打印通过 URL 查询字符串传递的所有参数（request.GET 是一个类似字典的对象）
    print('###', request.GET)
    
    # 获取单个参数 'name'，如果没有传递则使用默认值 'Ming'
    name = request.GET.get('name', 'Ming') 
    # 获取单个参数 'password'
    psd = request.GET.get('password')
    print('###', name, psd)  # 打印获取到的参数值
    
    # 获取多个参数 'hobby'（可能传递多个值，如 ?hobby=reading&hobby=sports）
    hobbies = request.GET.getlist('hobby')  # 返回一个列表
    print('###', hobbies)
    
    # 返回一个 HTTP 响应，内容类型为 text/html
    return HttpResponse(data, content_type="text/html")

# 定义一个处理 POST 请求（表单数据）的视图函数
def PostPageForm(request):
    # 打印通过 HTTP POST 请求发送的所有表单数据（request.POST 是一个类似字典的对象）
    print('###', request.POST)
    
    # 获取单个参数 'name'
    name = request.POST.get('name')
    # 获取单个参数 'id'
    id = request.POST.get('id')
    print('###', name, id)  # 打印获取到的参数值
    
    # 获取多个参数 'hobby'（可能传递多个值，如表单中有多个同名 input）
    hobbies = request.POST.getlist('hobby')
    print('###', hobbies)
    
    # 返回一个 HTTP 响应，内容类型为 text/html
    return HttpResponse('<h1>form:request.POST</h1>', content_type="text/html")

# 定义一个处理 POST 请求（JSON 数据）的视图函数
def PostPageJSON(request):
    # 打印原始请求体（request.body 是原始的字节数据）
    print('###', request.body)
    
    # 将请求体解析为 JSON 数据（需要确保客户端发送的是 JSON 格式的数据）
    info = json.loads(request.body)
    print('###', info)  # 打印解析后的 JSON 数据
    
    # 返回一个简单的 HTML 响应（注意：这里返回的内容与 JSON 数据无关）
    data = '<h1>JSON:request.POST</h1>'
    return HttpResponse(data, content_type="text/html")

# 定义一个处理请求头信息的视图函数
def HeadersPage(request):
    # 打印所有请求头信息（request.headers 是一个类似字典的对象）
    print('###', request.headers)
    
    # 获取特定的请求头 'num'（如果不存在则返回 None）
    print('###', request.headers.get('num'))
    
    # 返回一个简单的 HTML 响应
    data = '<h1>request.headers</h1>'
    return HttpResponse(data, content_type="text/html")

# 定义一个处理文件上传的视图函数
def FilesPage(request):
    # 打印上传的文件信息（request.FILES 是一个类似字典的对象，存储上传的文件）
    print('###', request.FILES)
    
    # 返回一个简单的 HTML 响应
    data = '<h1>request.files</h1>'
    return HttpResponse(data, content_type="text/html")

# 定义一个返回 JSON 响应的视图函数
def JSONResponsePage(request):
    # 定义一个字典作为响应数据
    data = {
        "name": "Ming",
        "age": 18,
        "sex": "male"
    }
    # 返回一个 JSON 响应（要求第一个参数为字典类型，若不为字典，则需要添加safe=False参数）
    return JsonResponse(data)

# 定义一个返回 JavaScript 文件内容的视图函数
def JSResponsePage(request):
    # 获取当前文件（views.py）所在的目录
    current_dir = os.path.dirname(os.path.abspath(__file__))
    # 构造 JavaScript 文件的绝对路径
    file_path = os.path.join(current_dir, 'resource', 'demo.js')
    
    # 打开 JavaScript 文件并以二进制模式读取内容
    with open(file_path, 'rb') as file:
        js = file.read()
    
    # 返回 JavaScript 文件内容，设置内容类型为 text/javascript
    return HttpResponse(content=js, content_type="text/javascript")